--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nomadnet/ui/textui/Browser.py e17d9a8cea71c8311e1a07bf299dcd85fd7dd982 (e17d9a8c) Text, 72.92 KB
Tff7b72import T7ee787RNS
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787io
Tff7b72import T7ee787os
Tff7b72import T7ee787time
Tff7b72import T7ee787urwid
Tff7b72import T7ee787shutil
Tff7b72import T7ee787nomadnet
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787threading
Tff7b72from T7ee787threading Tff7b72import Te6edf3Lock
Tff7b72from T7ee787.T7ee787MicronParser Tff7b72import Te6edf3markup_to_attrmapsTb4b4b4, Te6edf3make_styleTb4b4b4, Te6edf3default_state
Tff7b72from T7ee787nomadnetT7ee787.T7ee787Directory Tff7b72import Te6edf3DirectoryEntry
Tff7b72from T7ee787nomadnetT7ee787.T7ee787vendorT7ee787.T7ee787Scrollable Tff7b72import Tff7b72*
Tff7b72from T7ee787nomadnetT7ee787.T7ee787util Tff7b72import Te6edf3strip_modifiers
Tff7b72from T7ee787nomadnetT7ee787.T7ee787util Tff7b72import Te6edf3sanitize_name
Tff7b72class T56d364BrowserFrameTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFrameTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisconnectTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl dTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffbackTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl fTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffforwardTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl rTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffreloadTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffurl_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl sTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffsave_node_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl bTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffsave_node_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl gTa5d6ff"Tb4b4b4:
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffnetwork_displayTff7b72.Td2a8fftoggle_fullscreenTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72== Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff" Tff7b72or Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTb4b4b4, Ta5d6ff"Ta5d6ffpage_pileTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffpage_pileTb4b4b4:
Tff7b72def Td2a8ffdfTb4b4b4(Te6edf3loopTb4b4b4, Te6edf3user_dataTb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffpage_pileTb4b4b4:
Te6edf3nf Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffpage_pileTff7b72.Td2a8fffocus
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3nfTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3nf
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3nfTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3no Tff7b72= Te6edf3nfTff7b72.Td2a8fforiginal_widget
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3noTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3noTff7b72.Td2a8fforiginal_widget
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3noTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3no
Tff7b72if Te6edf3st Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3stTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4) Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3stTb4b4b4, Ta5d6ff"Ta5d6ffkeypressTa5d6ff"Tb4b4b4) Tff7b72and Tffa657callableTb4b4b4(Te6edf3stTff7b72.Td2a8ffkeypressTb4b4b4)Tb4b4b4:
Te6edf3stTff7b72.Td2a8ffkeypressTb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff0.25Tb4b4b4, Te6edf3dfTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting up cursor timeout. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Te6edf3BrowserFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3BrowserFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364BrowserTb4b4b4:
Te6edf3DEFAULT_PATH Tff7b72= Ta5d6ff"Ta5d6ff/page/index.muTa5d6ff"
Te6edf3DEFAULT_TIMEOUT Tff7b72= T79c0ff10
Te6edf3DEFAULT_CACHE_TIME Tff7b72= T79c0ff12Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Te6edf3NO_PATH Tff7b72= T79c0ff0x00
Te6edf3PATH_REQUESTED Tff7b72= T79c0ff0x01
Te6edf3ESTABLISHING_LINK Tff7b72= T79c0ff0x02
Te6edf3LINK_TIMEOUT Tff7b72= T79c0ff0x03
Te6edf3LINK_ESTABLISHED Tff7b72= T79c0ff0x04
Te6edf3REQUESTING Tff7b72= T79c0ff0x05
Te6edf3REQUEST_SENT Tff7b72= T79c0ff0x06
Te6edf3REQUEST_FAILED Tff7b72= T79c0ff0x07
Te6edf3REQUEST_TIMEOUT Tff7b72= T79c0ff0x08
Te6edf3RECEIVING_RESPONSE Tff7b72= T79c0ff0x09
Te6edf3DISCONECTED Tff7b72= T79c0ff0xFE
Te6edf3DONE Tff7b72= T79c0ff0xFF
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3app_nameTb4b4b4, Te6edf3aspectsTb4b4b4, Te6edf3destination_hash Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3path Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3auth_identity Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3delegate Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffg Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72= Te6edf3delegate
Tff7b72selfTff7b72.Td2a8ffapp_name Tff7b72= Te6edf3app_name
Tff7b72selfTff7b72.Td2a8ffaspects Tff7b72= Te6edf3aspects
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3destination_hash
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3path
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_TIMEOUT
Tff7b72selfTff7b72.Td2a8fflast_keypress Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffloopback Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fffile_saved_at Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fffile_save_notice_timeout Tff7b72= T79c0ff3
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdisplayed_page_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffauth_identity Tff7b72= Te6edf3auth_identity
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflink_target Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffframe Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_partials Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffupdater_running Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffpartial_updater_lock Tff7b72= Te6edf3LockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbuild_displayTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclean_cacheTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcurrent_urlTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3path Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8ffpath
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3path
Tff7b72def Td2a8ffurl_hashTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3url Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3url Tff7b72= Te6edf3urlTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffmarked_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4, Te6edf3link_fieldsTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3link_fieldsTb4b4b4:
Te6edf3fields_str Tff7b72= Ta5d6ff"Ta5d6ff|Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3link_fieldsTb4b4b4)
Te6edf3link_target Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3link_targetTffd700}Ta5d6ff`Tffd700{Te6edf3fields_strTffd700}Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_target Tff7b72= Te6edf3link_target
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff0.1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffmarked_link_jobTb4b4b4)
Tff7b72def Td2a8ffmarked_link_jobTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3eventTb4b4b4)Tb4b4b4:
Te6edf3link_target Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_target
Te6edf3can_display Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fffile_saved_at Tff7b72+ Tff7b72selfTff7b72.Td2a8fffile_save_notice_timeout
Tff7b72if Te6edf3link_target Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink_status_showingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3can_displayTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72True
Te6edf3lt_str Tff7b72= Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3lt_strTb4b4b4) Tff7b72> T79c0ff80Tb4b4b4: Te6edf3lt_str Tff7b72= Te6edf3lt_strTb4b4b4[Tb4b4b4:T79c0ff80Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff…Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffLink to: Ta5d6ff"Tff7b72+Te6edf3lt_strTb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72def Td2a8ffexpand_shorthandsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_typeTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffnnnTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffrrcTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffrrc.hub.sessionTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3destination_type
Tff7b72def Td2a8ffhandle_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4, Te6edf3link_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3partial_ids Tff7b72= Tff7b72None
Te6edf3request_data Tff7b72= Tff7b72None
Tff7b72if Te6edf3link_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3link_fields Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3request_data Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3all_fields Tff7b72= Tff7b72True Tff7b72if Ta5d6ff"Ta5d6ff*Ta5d6ff" Tff7b72in Te6edf3link_data Tff7b72else Tff7b72False
Tff7b72for Te6edf3e Tff7b72in Te6edf3link_dataTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff=Ta5d6ff" Tff7b72in Te6edf3eTb4b4b4:
Te6edf3c Tff7b72= Te6edf3eTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3cTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3request_dataTb4b4b4[Ta5d6ff"Ta5d6ffvar_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3link_fieldsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffrecurse_downTb4b4b4(Te6edf3wTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffcontentsTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ffcontentsTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8fforiginal_widgetTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ff_original_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ff_original_widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_nameTa5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Te6edf3all_fields Tff7b72or Te6edf3wTff7b72.Td2a8fffield_name Tff7b72in Te6edf3link_fieldsTb4b4b4)Tb4b4b4:
Te6edf3field_key Tff7b72= Ta5d6ff"Ta5d6fffield_Ta5d6ff" Tff7b72+ Te6edf3wTff7b72.Td2a8fffield_name
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3wTff7b72.Td2a8ffedit_text
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffRadioButtonTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3user_data Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4)Tb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3existing_value Tff7b72= Te6edf3request_dataTff7b72.Td2a8ffgetTb4b4b4(Te6edf3field_keyTb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existing_valueTb4b4b4:
T8b949e# Concatenate the new value with the existing one
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3existing_value Tff7b72+ Ta5d6ff'Ta5d6ff,Ta5d6ff' Tff7b72+ Te6edf3user_data
Tff7b72elseTb4b4b4:
T8b949e# Initialize the field with the current value
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elseTb4b4b4:
Tff7b72pass T8b949e# do nothing if checkbox is not check
Te6edf3recurse_downTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIncluding request data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3request_dataTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
T8b949e# rrc://<hex>[:<dest_name>]/<room> URL form
Tff7b72if Te6edf3link_targetTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffrrc://Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhandle_rrc_linkTb4b4b4(Te6edf3link_targetTb4b4b4[T79c0ff6Tb4b4b4:Tb4b4b4]Tb4b4b4)
Tff7b72return
Te6edf3components Tff7b72= Te6edf3link_targetTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff@Ta5d6ff"Tb4b4b4)
Te6edf3destination_type Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3destination_type Tff7b72= Tff7b72selfTff7b72.Td2a8ffexpand_shorthandsTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3link_target Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elif Te6edf3link_targetTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffp:Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3comps Tff7b72= Te6edf3link_targetTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3compsTb4b4b4) Tff7b72> T79c0ff1Tb4b4b4: Te6edf3partial_ids Tff7b72= Te6edf3compsTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Te6edf3destination_type Tff7b72= Ta5d6ff"Ta5d6ffpartialTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3destination_type Tff7b72= Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"
Te6edf3link_target Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72>Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser handling link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffOpening link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3link_targetTb4b4b4, Te6edf3request_dataTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser already handling link, cannot handle link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPassing LXMF link to handlerTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandle_lxmf_linkTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffrrc.hub.sessionTa5d6ff"Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPassing RRC link to handlerTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandle_rrc_linkTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffpartialTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3partial_ids Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3partial_idsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffhandle_partial_updatesTb4b4b4(Te6edf3partial_idsTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo known handler for destination type Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3destination_typeTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Ta5d6ff"Ta5d6ffNo known handler for destination type Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3destination_typeTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffhandle_lxmf_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72def Td2a8ffsanTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftextuiTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffsanitize_namesTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72return Te6edf3sanitize_nameTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72return Te6edf3strip_modifiersTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Tff7b72not Tffa657typeTb4b4b4(Te6edf3link_targetTb4b4b4) Tff7b72is Tffa657strTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid data type for LXMF linkTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3link_targetTb4b4b4) Tff7b72!= Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid length for LXMF linkTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode destination hash from LXMF linkTa5d6ff"Tb4b4b4)
Te6edf3existing_conversations Tff7b72= Te6edf3nomadnetTff7b72.Td2a8ffConversationTff7b72.Td2a8ffconversation_listTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Te6edf3source_hash_text Tff7b72= Te6edf3link_target
Te6edf3display_name_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3source_hash_textTb4b4b4)Tb4b4b4)
Te6edf3display_name Tff7b72= Tff7b72None
Tff7b72if Te6edf3display_name_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3display_name Tff7b72= Te6edf3sanTb4b4b4(Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3display_name_dataTb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3source_hash_text Tff7b72in Tb4b4b4[Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3c Tff7b72in Te6edf3existing_conversationsTb4b4b4]Tb4b4b4:
Te6edf3entry Tff7b72= Te6edf3DirectoryEntryTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3source_hash_textTb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72=Te6edf3display_nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3entryTb4b4b4)
Te6edf3new_conversation Tff7b72= Te6edf3nomadnetTff7b72.Td2a8ffConversationTb4b4b4(Te6edf3source_hash_textTb4b4b4, Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3initiatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffconversations_displayTff7b72.Td2a8ffupdate_conversation_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffconversations_displayTff7b72.Td2a8ffdisplay_conversationTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3source_hash_textTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffshow_conversationsTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while starting conversation from link. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open LXMF link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffhandle_rrc_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3link_targetTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid RRC link payloadTa5d6ff"Tb4b4b4)
Te6edf3rest Tff7b72= Te6edf3link_targetTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3restTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3rest Tff7b72= Te6edf3restTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
Te6edf3hub_partTb4b4b4, Te6edf3_Tb4b4b4, Te6edf3room Tff7b72= Te6edf3restTff7b72.Td2a8ffpartitionTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Te6edf3hex_partTb4b4b4, Te6edf3_Tb4b4b4, Te6edf3dest Tff7b72= Te6edf3hub_partTff7b72.Td2a8ffpartitionTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)
Te6edf3hex_part Tff7b72= Te6edf3hex_partTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3dest Tff7b72= Te6edf3destTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72or Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3hub_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3hex_partTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid hub hashTa5d6ff"Tb4b4b4)
Te6edf3expected_len Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTH Tff7b72/Tff7b72/ T79c0ff8
Tff7b72if Tffa657lenTb4b4b4(Te6edf3hub_hashTb4b4b4) Tff7b72!= Te6edf3expected_lenTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffhub hash must be Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3expected_lenTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)
Te6edf3room Tff7b72= Te6edf3roomTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflstripTb4b4b4(Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3room_norm Tff7b72= Tff7b72None
Tff7b72if Te6edf3roomTb4b4b4:
Tff7b72tryTb4b4b4:
T8b949e# validate the room name early; pass the raw value through
Tff7b72from T7ee787nomadnetT7ee787.T7ee787RRC Tff7b72import Te6edf3RRCHub Tff7b72as Te6edf3_RRCHubCls T8b949e# noqa
Te6edf3room_norm Tff7b72= Te6edf3roomTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3room_norm Tff7b72= Tff7b72None
Te6edf3existing Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrrcTff7b72.Td2a8fffind_hubTb4b4b4(Te6edf3hub_hashTb4b4b4, Te6edf3dest_nameTff7b72=Te6edf3destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffshow_channelsTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3channels Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffchannels_display
Tff7b72if Te6edf3existing Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3channelsTff7b72.Td2a8ffupdate_listTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3room_normTb4b4b4:
Te6edf3channelsTff7b72.Td2a8ff_select_roomTb4b4b4(Tff7b72NoneTb4b4b4, Tb4b4b4(Te6edf3existingTb4b4b4, Te6edf3room_normTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3channelsTff7b72.Td2a8ff_select_hubTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3existingTb4b4b4)
Tff7b72return
Te6edf3channelsTff7b72.Td2a8ffconfirm_new_hub_dialogTb4b4b4(Te6edf3hub_hashTb4b4b4, Te6edf3destTb4b4b4, Te6edf3room_normTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not open RRC link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open RRC link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffmicron_released_focusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fffocus_listsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffbuild_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_partials Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffDisconnectedTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe Tff7b72= Te6edf3BrowserFrameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTb4b4b4, Te6edf3headerTff7b72=Tff7b72selfTff7b72.Td2a8ffbrowser_headerTb4b4b4, Te6edf3footerTff7b72=Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8fflinebox Tff7b72= Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframeTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffRemote NodeTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Tff7b72selfTff7b72.Td2a8fflineboxTb4b4b4, Ta5d6ff"Ta5d6ffbrowser_inactiveTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_status_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Te6edf3style_name_inverted Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3style_name Tff7b72= Ta5d6ff"Ta5d6ffprogress_emptyTa5d6ff"
Te6edf3style_name_inverted Tff7b72= Ta5d6ff"Ta5d6ffprogress_fullTa5d6ff"
Te6edf3pb Tff7b72= Te6edf3ResponseProgressBarTb4b4b4(Te6edf3style_name Tb4b4b4, Te6edf3style_name_invertedTb4b4b4, Te6edf3currentTff7b72=Tff7b72selfTff7b72.Td2a8ffresponse_progressTb4b4b4, Te6edf3doneTff7b72=T79c0ff1.0Tb4b4b4, Te6edf3sattTff7b72=Tff7b72NoneTb4b4b4, Te6edf3ownerTff7b72=Tff7b72selfTb4b4b4)
Te6edf3widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3pbTb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3widgetTb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_control_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffnodeTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_request_failed_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffback_actionTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffprevious_destination_hash
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffprevious_path
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3columns Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.5Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(T79c0ff8Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3back_actionTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.5Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff!Tffea00\nTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3columns
Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff!Tffea00\nTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Te6edf3pileTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4)
Tff7b72def Td2a8ffupdate_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Ta5d6ff"Ta5d6ffbrowser_inactiveTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_partials Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffDisconnectedTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflineboxTff7b72.Td2a8ffset_titleTb4b4b4(Ta5d6ff"Ta5d6ffRemote NodeTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Ta5d6ff"Ta5d6ffbody_textTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_control_widgetTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_display_string Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffsimplest_display_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3remote_display_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffloopback Tff7b72!= Tff7b72None Tff7b72and Te6edf3remote_display_string Tff7b72== Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4)Tb4b4b4:
Te6edf3remote_display_string Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffnodeTff7b72.Td2a8ffname
Tff7b72selfTff7b72.Td2a8fflineboxTff7b72.Td2a8ffset_titleTb4b4b4(Te6edf3remote_display_stringTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_page_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUTTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72<Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENTTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffRetrievingTffea00\nTa5d6ff[Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUTTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6ffheaderTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_headerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffupdate_page_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4)
Te6edf3pileTff7b72.Td2a8ffautomove_cursor_on_scroll Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Te6edf3pile
Tff7b72selfTff7b72.Td2a8ffpage_partials Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3ScrollBarTb4b4b4(Te6edf3ScrollableTb4b4b4(Te6edf3pileTb4b4b4, Te6edf3force_forward_keypressTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4, Te6edf3thumb_charTff7b72=Ta5d6ff"Tffea00\u2503Ta5d6ff"Tb4b4b4, Te6edf3trough_charTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffscrollbarTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdetect_partialsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffparse_urlTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3path Tff7b72= Tff7b72None
Te6edf3destination_hash Tff7b72= Tff7b72None
Te6edf3components Tff7b72= Te6edf3urlTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elif Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3destination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3destination_hashTb4b4b4, Te6edf3path
Tff7b72def Td2a8ffdetect_partialsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3w Tff7b72in Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4:
Te6edf3o Tff7b72= Te6edf3wTff7b72.Td2a8ff_original_widget
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3oTb4b4b4, Ta5d6ff"Ta5d6ffpartial_hashTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFound partial: Tffd700{Te6edf3oTff7b72.Td2a8ffpartial_hashTffd700}Ta5d6ff / Tffd700{Te6edf3oTff7b72.Td2a8ffpartial_urlTffd700}Ta5d6ff / Tffd700{Te6edf3oTff7b72.Td2a8ffpartial_refreshTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3partial Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4: Te6edf3oTff7b72.Td2a8ffpartial_hashTb4b4b4, Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3oTff7b72.Td2a8ffpartial_idTb4b4b4, Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4: Te6edf3oTff7b72.Td2a8ffpartial_urlTb4b4b4, Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4: Te6edf3oTff7b72.Td2a8ffpartial_fieldsTb4b4b4,
Ta5d6ff"Ta5d6ffrefreshTa5d6ff"Tb4b4b4: Te6edf3oTff7b72.Td2a8ffpartial_refreshTb4b4b4, Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ffupdatedTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ffupdate_requestedTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Ta5d6ff"Ta5d6ffdestinationTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ffpileTa5d6ff"Tb4b4b4: Te6edf3oTb4b4b4, Ta5d6ff"Ta5d6ffattr_mapsTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4, Ta5d6ff"Ta5d6ffpr_throttleTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3oTff7b72.Td2a8ffpartial_hashTb4b4b4] Tff7b72= Te6edf3partial
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffstart_partial_updaterTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffpartial_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoading page partial failedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72for Te6edf3pid Tff7b72in Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4:
Te6edf3partial Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3pidTb4b4b4]
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3request_receiptTff7b72.Td2a8ffrequest_idTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdatedTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffattr_mapsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3url Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4]
Te6edf3pile Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffpileTa5d6ff"Tb4b4b4]
Te6edf3pileTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not load partial Tffd700{Te6edf3urlTffd700}Ta5d6ff: The resource transfer failedTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3pileTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError in partial failed callback: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffpartial_progressedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffpartial_receivedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3pid Tff7b72in Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4:
Te6edf3partial Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3pidTb4b4b4]
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3request_receiptTff7b72.Td2a8ffrequest_idTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdatedTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdate_requestedTa5d6ff"Tb4b4b4]
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponseTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffrstripTb4b4b4(Tb4b4b4)
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffattr_mapsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffcontentTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Te6edf3pile Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffpileTa5d6ff"Tb4b4b4]
Te6edf3pileTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3eTb4b4b4, Te6edf3pileTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72for Te6edf3e Tff7b72in Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffattr_mapsTa5d6ff"Tb4b4b4]Tb4b4b4]
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ff__load_partialTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3partialTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72TrueTb4b4b4: Tff7b72return
Tff7b72tryTb4b4b4: Te6edf3partial_destination_hashTb4b4b4, Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8ffparse_urlTb4b4b4(Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not parse partial URL: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Te6edf3pile Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffpileTa5d6ff"Tb4b4b4]
Te6edf3url Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4]
Te6edf3pileTff7b72.Td2a8ffcontents Tff7b72= Tb4b4b4[Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not load partial Tffd700{Te6edf3urlTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3pileTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4]
Tff7b72return
Tff7b72if Te6edf3partial_destination_hash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffloopback Tff7b72and Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3partial_destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffpr_throttleTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72return
Tff7b72elseTb4b4b4:
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffpr_throttleTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+T79c0ff15
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffRequesting path for partial: Tffd700{Te6edf3partial_destination_hashTffd700}Ta5d6ff / Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Te6edf3partial_destination_hashTb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8fffirst_hop_timeoutTb4b4b4(Te6edf3partial_destination_hashTb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Te6edf3partial_destination_hashTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3pr_timeTff7b72+Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4: Tff7b72return
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72for Te6edf3pid Tff7b72in Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4:
Te6edf3other_partial Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3pidTb4b4b4]
Tff7b72if Te6edf3other_partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3existing_link Tff7b72= Te6edf3other_partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3existing_linkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72== Te6edf3partial_destination_hash Tff7b72and Te6edf3existing_linkTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffRe-using existing link: Tffd700{Te6edf3existing_linkTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3existing_link
Tff7b72break
Tff7b72if Tff7b72not Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4] Tff7b72or Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffCLOSEDTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffEstablishing link for partial: Tffd700{Te6edf3partial_destination_hashTffd700}Ta5d6ff / Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3partial_destination_hashTb4b4b4)
Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffaspectsTb4b4b4)
Tff7b72def Td2a8ffestablishedTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLink established for partial: Tffd700{Te6edf3partial_destination_hashTffd700}Ta5d6ff / Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72def Td2a8ffclosedTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffLink closed for partial: Tffd700{Te6edf3partial_destination_hashTffd700}Ta5d6ff / Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3established_callback Tff7b72= Te6edf3establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Te6edf3closedTb4b4b4)
Te6edf3timeout Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Tff7b72selfTff7b72.Td2a8fftimeout
Tff7b72while Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVE Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3timeoutTb4b4b4: Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4] Tff7b72and Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVE Tff7b72and Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSending request for partial: Tffd700{Te6edf3partial_destination_hashTffd700}Ta5d6ff / Tffd700{Te6edf3pathTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Te6edf3receipt Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fflinkTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffrequestTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3dataTff7b72=Tff7b72selfTff7b72.Td2a8ff__get_partial_request_dataTb4b4b4(Te6edf3partialTb4b4b4)Tb4b4b4, Te6edf3response_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffpartial_receivedTb4b4b4,
Te6edf3failed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffpartial_failedTb4b4b4, Te6edf3progress_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffpartial_progressedTb4b4b4)
Tff7b72if Te6edf3receiptTb4b4b4: Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrequest_idTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3receiptTff7b72.Td2a8ffrequest_id
Tff7b72elseTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffPartial request failedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ff__get_partial_request_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3partialTb4b4b4)Tb4b4b4:
Te6edf3request_data Tff7b72= Tff7b72None
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3link_data Tff7b72= Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fffieldsTa5d6ff"Tb4b4b4]
Te6edf3link_fields Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3request_data Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3all_fields Tff7b72= Tff7b72True Tff7b72if Ta5d6ff"Ta5d6ff*Ta5d6ff" Tff7b72in Te6edf3link_data Tff7b72else Tff7b72False
Tff7b72for Te6edf3e Tff7b72in Te6edf3link_dataTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff=Ta5d6ff" Tff7b72in Te6edf3eTb4b4b4:
Te6edf3c Tff7b72= Te6edf3eTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3cTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3request_dataTb4b4b4[Ta5d6ff"Ta5d6ffvar_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3link_fieldsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffrecurse_downTb4b4b4(Te6edf3wTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffcontentsTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ffcontentsTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8fforiginal_widgetTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ff_original_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ff_original_widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_nameTa5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Te6edf3all_fields Tff7b72or Te6edf3wTff7b72.Td2a8fffield_name Tff7b72in Te6edf3link_fieldsTb4b4b4)Tb4b4b4:
Te6edf3field_key Tff7b72= Ta5d6ff"Ta5d6fffield_Ta5d6ff" Tff7b72+ Te6edf3wTff7b72.Td2a8fffield_name
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3wTff7b72.Td2a8ffedit_text
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffRadioButtonTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3user_data Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4)Tb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3existing_value Tff7b72= Te6edf3request_dataTff7b72.Td2a8ffgetTb4b4b4(Te6edf3field_keyTb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existing_valueTb4b4b4:
T8b949e# Concatenate the new value with the existing one
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3existing_value Tff7b72+ Ta5d6ff'Ta5d6ff,Ta5d6ff' Tff7b72+ Te6edf3user_data
Tff7b72elseTb4b4b4:
T8b949e# Initialize the field with the current value
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elseTb4b4b4:
Tff7b72pass T8b949e# do nothing if checkbox is not check
Te6edf3recurse_downTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIncluding request data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3request_dataTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Te6edf3request_data
Tff7b72def Td2a8ffstart_partial_updaterTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffupdater_runningTb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_partialsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffhandle_partial_updatesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3partial_idsTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUpdate partials: Tffd700{Te6edf3partial_idsTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3pid Tff7b72in Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3partial Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3pidTb4b4b4]
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72in Te6edf3partial_idsTb4b4b4:
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdate_requestedTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_partialTb4b4b4(Te6edf3partialTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError updating page partial: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffupdate_partialsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3loopTff7b72=Tff7b72NoneTb4b4b4, Te6edf3user_dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffpartial_updater_lockTb4b4b4:
Tff7b72def Td2a8ffjobTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3pid Tff7b72in Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3partial Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4[Te6edf3pidTb4b4b4]
Tff7b72if Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6fffailedTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72continue
Tff7b72if Tff7b72not Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdatedTa5d6ff"Tb4b4b4] Tff7b72or Tb4b4b4(Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrefreshTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdatedTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffrefreshTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3partialTb4b4b4[Ta5d6ff"Ta5d6ffupdate_requestedTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff__load_partialTb4b4b4(Te6edf3partialTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError updating page partial: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3jobTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpage_partialsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdater_running Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffupdate_partialsTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffupdater_running Tff7b72= Tff7b72False
Tff7b72def Td2a8ffidentifyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffidentifyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffauth_identityTb4b4b4)
Tff7b72def Td2a8ffdisconnectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffretrieve_urlTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3request_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3components Tff7b72= Te6edf3urlTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff`Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3url Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3link_fields_str Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3link_fields_str Tff7b72!= Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3request_dataTb4b4b4: Te6edf3request_data Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3e Tff7b72in Te6edf3link_fields_strTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff|Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff=Ta5d6ff" Tff7b72in Te6edf3eTb4b4b4:
Te6edf3c Tff7b72= Te6edf3eTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3cTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3request_dataTb4b4b4[Ta5d6ff"Ta5d6ffvar_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffMalformed URL: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffMalformed URL: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffprevious_destination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Tff7b72selfTff7b72.Td2a8ffprevious_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffpath
Te6edf3destination_hash Tff7b72= Tff7b72None
Te6edf3path Tff7b72= Tff7b72None
Te6edf3components Tff7b72= Te6edf3urlTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elif Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3destination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4: Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3destination_hash Tff7b72!= Tff7b72None Tff7b72and Te6edf3path Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3pathTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff/file/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3destination_hash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4:
Tff7b72if Te6edf3destination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdownload_fileTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3dataTff7b72=Te6edf3request_dataTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCannot request file download from a node that is not currently connected.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe requested URL was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdownload_local_fileTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_destination_hashTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_pathTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_request_dataTb4b4b4(Te6edf3request_dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_destination_hashTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3destination_hash
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffset_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3path
Tff7b72def Td2a8ffset_request_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Te6edf3request_data
Tff7b72def Td2a8ffset_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3timeoutTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Te6edf3timeout
Tff7b72def Td2a8ffdownload_local_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3file_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fffilespathTff7b72+Te6edf3pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/fileTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3file_pathTb4b4b4)
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3fs Tff7b72= Tffa657openTb4b4b4(Te6edf3file_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3fd Tff7b72= Tffa657openTb4b4b4(Te6edf3file_destinationTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fdTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3fsTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3fdTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3fsTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Te6edf3file_destinationTff7b72.Td2a8ffreplaceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3file_destinationTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe requested local download file does not exist: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling file response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffdownload_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3dataTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72== Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffNO_PATH
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8fffirst_hop_timeoutTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3pr_timeTff7b72+Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_timeoutTb4b4b4(Tb4b4b4)
Tff7b72return
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINK
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffaspects
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3established_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_closedTb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72== Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
T8b949e# Send the request
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUESTING
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3receipt Tff7b72= Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrequestTb4b4b4(
Te6edf3pathTb4b4b4,
Te6edf3data Tff7b72= Te6edf3dataTb4b4b4,
Te6edf3response_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fffile_receivedTb4b4b4,
Te6edf3failed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_failedTb4b4b4,
Te6edf3progress_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progressed
Tb4b4b4)
Tff7b72if Te6edf3receiptTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_request_receipt Tff7b72= Te6edf3receipt
Tff7b72selfTff7b72.Td2a8fflast_request_id Tff7b72= Te6edf3receiptTff7b72.Td2a8ffrequest_id
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENT
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffwrite_historyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3entry Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4, Tff7b72selfTff7b72.Td2a8ffrequest_dataTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffinsertTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4, Te6edf3entryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Tb4b4b4:Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4]
Tff7b72def Td2a8ffbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3target_ptr Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistory_ptrTff7b72-T79c0ff1
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_decTb4b4b4:
Tff7b72if Te6edf3target_ptr Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72True
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Te6edf3target_ptrTff7b72-T79c0ff1Tb4b4b4]
Te6edf3url Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= Te6edf3target_ptr
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3request_dataTff7b72=Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffforwardTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3target_ptr Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistory_ptrTff7b72+T79c0ff1
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_decTb4b4b4:
Tff7b72if Te6edf3target_ptr Tff7b72<Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72True
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Te6edf3target_ptrTff7b72-T79c0ff1Tb4b4b4]
Te6edf3url Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= Te6edf3target_ptr
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3urlTb4b4b4, Te6edf3request_dataTff7b72=Te6edf3entryTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffreloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72and Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffclose_dialogsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72def Td2a8ffurl_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3e_url Tff7b72= Te6edf3UrlEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffURL : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3e_urlTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3UrlDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3e_urlTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffGoTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffEnter URLTa5d6ff"
Tb4b4b4)
Te6edf3e_urlTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplay_widget
Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(
Te6edf3dialogTb4b4b4,
Te6edf3bottomTb4b4b4,
Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4,
Te6edf3widthTff7b72=Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffRELATIVETb4b4b4, T79c0ff65Tb4b4b4)Tb4b4b4,
Te6edf3valignTff7b72=Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4,
Te6edf3leftTff7b72=T79c0ff2Tb4b4b4,
Te6edf3rightTff7b72=T79c0ff2Tb4b4b4,
Tb4b4b4)
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72def Td2a8ffsave_node_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3display_name Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3disp_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3display_name Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3display_name Tff7b72= Te6edf3display_nameTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3disp_str Tff7b72= Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ff"Tff7b72+Te6edf3display_nameTff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3node_entry Tff7b72= Te6edf3DirectoryEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3display_nameTff7b72=Te6edf3display_nameTb4b4b4, Te6edf3hosts_nodeTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3node_entryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffnetwork_displayTff7b72.Td2a8ffdirectory_change_callbackTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3UrlDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffSave connected nodeTa5d6ff"Tff7b72+Te6edf3disp_strTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to Known Nodes?Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffSaveTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffSave NodeTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplay_widget
Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(
Te6edf3dialogTb4b4b4,
Te6edf3bottomTb4b4b4,
Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4,
Te6edf3widthTff7b72=Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffRELATIVETb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4,
Te6edf3valignTff7b72=Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4,
Te6edf3leftTff7b72=T79c0ff2Tb4b4b4,
Te6edf3rightTff7b72=T79c0ff2Tb4b4b4,
Tb4b4b4)
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffload_pageTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3cached Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_cachedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3cached Tff7b72= Tff7b72None
Tff7b72if Te6edf3cachedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3cached
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not render page: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_inactiveTa5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4:
Te6edf3load_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__loadTb4b4b4)
Te6edf3load_threadTff7b72.Td2a8ffsetDaemonTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3load_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser handling local page: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3page_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffpagespathTff7b72+Tff7b72selfTff7b72.Td2a8ffpathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/pageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3page_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffThe requested local page did not exist in the file systemTa5d6ff"
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3page_pathTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffaccessTb4b4b4(Te6edf3page_pathTb4b4b4, Te6edf3osTff7b72.Td2a8ffX_OKTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3env_map Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_data
Tff7b72elseTb4b4b4:
Te6edf3env_map Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Ta5d6ff"Ta5d6ffPATHTa5d6ff" Tff7b72in Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4:
Te6edf3env_mapTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4]
Te6edf3generated Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(Tb4b4b4[Te6edf3page_pathTb4b4b4]Tb4b4b4, Te6edf3stdoutTff7b72=Te6edf3subprocessTff7b72.Td2a8ffPIPETb4b4b4, Te6edf3stderrTff7b72=Te6edf3subprocessTff7b72.Td2a8ffDEVNULLTb4b4b4, Te6edf3envTff7b72=Te6edf3env_mapTb4b4b4)
Te6edf3page_data Tff7b72= Te6edf3generatedTff7b72.Td2a8ffstdout
Tff7b72elseTb4b4b4:
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3page_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3page_data Tff7b72= Te6edf3fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3page_data
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not render page: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_inactiveTa5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72def Td2a8ff__loadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# If an established link exists, but it doesn't match the target
T8b949e# destination, we close and clear it.
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72None Tff7b72and Tb4b4b4(Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72or Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
T8b949e# If no link to the destination exists, we create one.
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffNO_PATH
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8fffirst_hop_timeoutTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3pr_timeTff7b72+Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_timeoutTb4b4b4(Tb4b4b4)
Tff7b72return
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINK
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffaspects
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3established_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_closedTb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
T8b949e# Send the request
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUESTING
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3receipt Tff7b72= Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrequestTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4,
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_dataTb4b4b4,
Te6edf3response_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_receivedTb4b4b4,
Te6edf3failed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_failedTb4b4b4,
Te6edf3progress_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progressed
Tb4b4b4)
Tff7b72if Te6edf3receiptTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_request_receipt Tff7b72= Te6edf3receipt
Tff7b72selfTff7b72.Td2a8fflast_request_id Tff7b72= Te6edf3receiptTff7b72.Td2a8ffrequest_id
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENT
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflink_establishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHED
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffshould_identify_on_connectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLink established, identifying to remote system...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffidentifyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentityTb4b4b4)
Tff7b72def Td2a8fflink_closedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED Tff7b72or Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_establishment_timeoutTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflink_establishment_timeoutTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUT
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffresponse_receivedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72elif Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff6Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not render page: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_inactiveTa5d6ff"Tb4b4b4)Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
T8b949e# Simple header handling. Should be expanded when more
T8b949e# header tags are added.
Te6edf3cache_time Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_CACHE_TIME
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Tb4b4b4:T79c0ff4Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff#!c=Ta5d6ff"Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3endpos Tff7b72== Tff7b72-T79c0ff1Tb4b4b4:
Te6edf3endpos Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)
Te6edf3cache_time Tff7b72= Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[T79c0ff4Tb4b4b4:Te6edf3endposTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72if Te6edf3cache_time Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, not caching due to header.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, caching for Tffd700%.3fTa5d6ff hours.Ta5d6ff" Tff7b72% Tb4b4b4(Te6edf3cache_timeTff7b72/T79c0ff60Tff7b72/T79c0ff60Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcache_pageTb4b4b4(Te6edf3cache_timeTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3url_hashTb4b4b4)Tb4b4b4:
Te6edf3cachefile Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachefileTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoved Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachefileTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff from cache.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffget_cachedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3cachepath Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Tff7b72tryTb4b4b4:
Te6edf3components Tff7b72= Te6edf3fileTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff64 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3expires Tff7b72= Tffa657floatTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3expiresTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3url_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFound Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in cache.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReturning cached pageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3cachepathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Te6edf3fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3data
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while parsing cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachepathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, removing it.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdditionally, an exception occurred while unlinking the entry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffYou will probably need to remove this entry manually by deleting the file: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachepathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffclean_cacheTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3cachepath Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Tff7b72tryTb4b4b4:
Te6edf3components Tff7b72= Te6edf3fileTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff64 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3expires Tff7b72= Tffa657floatTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3expiresTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffcache_pageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cache_timeTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3url_hash Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not cache page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3cache_expires Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3cache_time
Te6edf3filename Tff7b72= Te6edf3url_hashTff7b72+Ta5d6ff"Ta5d6ff_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cache_expiresTb4b4b4)
Te6edf3cachefile Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3filename
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3cachefileTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpage_dataTb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCached page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachefileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not write cache file for page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8fffile_receivedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657typeTb4b4b4(Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4) Tff7b72== Te6edf3ioTff7b72.Td2a8ffBufferedReaderTb4b4b4:
Tff7b72if Te6edf3request_receiptTff7b72.Td2a8ffmetadata Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3request_receiptTff7b72.Td2a8ffmetadataTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3file_handle Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffmoveTb4b4b4(Te6edf3file_handleTff7b72.Td2a8ffnameTb4b4b4, Te6edf3file_destinationTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Te6edf3file_destinationTff7b72.Td2a8ffreplaceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3file_destinationTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fffile_saved_at Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3file_data Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3file_destination_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3file_nameTb4b4b4)
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_destination_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_destination_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3fh Tff7b72= Tffa657openTb4b4b4(Te6edf3file_destinationTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fhTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3file_dataTb4b4b4)
Te6edf3fhTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Te6edf3file_destinationTff7b72.Td2a8ffreplaceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72tryTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3file_destinationTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsaved_file_size Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling file response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffrequest_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3request_receipt Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3request_receiptTff7b72.Td2a8ffrequest_id Tff7b72== Tff7b72selfTff7b72.Td2a8fflast_request_idTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffrequest_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUT
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffresponse_progressedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffprogress
Tff7b72selfTff7b72.Td2a8ffresponse_time Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffget_response_timeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse_size
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse_transfer_size
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Te6edf3now
Tff7b72if Te6edf3now Tff7b72> Tff7b72selfTff7b72.Td2a8ffprogress_updated_atTff7b72+T79c0ff0.5Tb4b4b4:
Te6edf3td Tff7b72= Te6edf3now Tff7b72- Tff7b72selfTff7b72.Td2a8ffprogress_updated_at
Te6edf3pd Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72- Tff7b72selfTff7b72.Td2a8ffprevious_progress
Te6edf3bd Tff7b72= Te6edf3pdTff7b72*Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tb4b4b4(Te6edf3bdTff7b72/Te6edf3tdTb4b4b4)Tff7b72*T79c0ff8
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progress
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Te6edf3now
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstatus_textTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONE Tff7b72and Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffresponse_time Tff7b72!= Tff7b72NoneTb4b4b4: Te6edf3response_time_str Tff7b72= Ta5d6ff"Tffd700{:.2f}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_timeTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3response_time_str Tff7b72= Ta5d6ff"Ta5d6ffNoneTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3resp_size Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_size
Tff7b72elseTb4b4b4: Te6edf3resp_size Tff7b72= Tff7b72selfTff7b72.Td2a8ffsaved_file_size
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Te6edf3resp_sizeTb4b4b4)
Te6edf3stats_string Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_dTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_transfer_sizeTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in Ta5d6ff"Tff7b72+Te6edf3response_time_str
Te6edf3stats_string Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffs Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffspeedTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_transfer_sizeTff7b72/Tff7b72selfTff7b72.Td2a8ffresponse_timeTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff"Ta5d6ffbTa5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/sTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffloaded_from_cacheTb4b4b4:
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff (cached)Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffNO_PATHTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo path to destination knownTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffPath requested, waiting for path...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffEstablishing link...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishment timed outTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUESTINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSending request...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest sent, awaiting response...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest timed outTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffRECEIVING_RESPONSETb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffReceiving response...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72return Ta5d6ff"Ta5d6ffDoneTa5d6ff"Tff7b72+Te6edf3stats_string
Tff7b72elseTb4b4b4: Tff7b72return Ta5d6ff"Ta5d6ffSaved Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsaved_file_nameTb4b4b4)Tff7b72+Te6edf3stats_string
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDisconnectedTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffBrowser Status UnknownTa5d6ff"
Tff7b72class T56d364ResponseProgressBarTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffProgressBarTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3emptyTb4b4b4, Te6edf3fullTb4b4b4, Te6edf3currentTff7b72=Tff7b72NoneTb4b4b4, Te6edf3doneTff7b72=Tff7b72NoneTb4b4b4, Te6edf3sattTff7b72=Tff7b72NoneTb4b4b4, Te6edf3ownerTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3emptyTb4b4b4, Te6edf3fullTb4b4b4, Te6edf3currentTff7b72=Te6edf3currentTb4b4b4, Te6edf3doneTff7b72=Te6edf3doneTb4b4b4, Te6edf3sattTff7b72=Te6edf3sattTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner Tff7b72= Te6edf3owner
Tff7b72def Td2a8ffget_textTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffresponse_speedTb4b4b4: Te6edf3speed_str Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffresponse_speedTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3speed_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffReceiving response Ta5d6ff"Tff7b72+Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff%Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff%Ta5d6ff"Tb4b4b4)Tff7b72+Te6edf3speed_str
T8b949e# A convenience function for printing a human-
T8b949e# readable file size
Tff7b72def Td2a8ffsize_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffBTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffbTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72*Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72if Te6edf3unit Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.0fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72class T56d364UrlDialogLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffescTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3UrlDialogLineBoxTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364UrlEditTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffenterTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfirmedTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3UrlEditTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────